package com.tiny.cqzcp.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * 全排列组合
 * @Author: jmz
 * @DateTime: 2021/2/19 10:20
 **/
public class FullPermutation {
	
	private static List<String> results = new ArrayList<String>();

	private void listAll(List<String> candidate, String prefix) {
		if (candidate.isEmpty()) {
			results.add(prefix);
		}
		for (int i = 0; i < candidate.size(); i++) {
			// 转换成linkList,移除一个对象是在不影响原来队列的基础上的
			List<String> temp = new LinkedList<>(candidate);
			String s1 = "";
			if(prefix == ""){
				// 用于保存排列组合生成的结果
				s1 =  temp.remove(i);
			}else{
				// 用于保存排列组合生成的结果
				s1 =  prefix + "," +temp.remove(i);
			}
			// 注意，这里temp和s1都是全新的集合和字符串，并不是一直对一个集合来进行操作
			listAll(temp, s1);
		}
	}

	public static List<String> getResult(int k,int size){
		String [] com = new String[20];
    	for(int n=0;n<size;n++){
    		if(n+1 < 10){
    			com[n] = "0"+(n+1);
    		}else{
    			com[n] = (n+1)+"";
    		}
    	}
    	CombineUtil combin = new CombineUtil();
		List<String> arrs = combin.getResult(0, k, com);
		FullPermutation f = new FullPermutation();
		for(String s : arrs){
			s = s.substring(1, s.length()-1);
			s = s.replaceAll(" ", "");
			String[] arr = s.split(",");
			f.listAll(Arrays.asList(arr),"");
		}
		return results;
	}

}
